#include <iostream>
#include <future>
#include <thread>
#include <memory>
int Add(int num1, int num2)
{
    return num1 + num2;
}


int main()
{
    // 1.封装任务
    auto task =  std::make_shared<std::packaged_task<int(int,int)>>(Add);
    // 2.获取任务包关联的future对象  -- 内部禁止拷贝构造
    std::future<int> ret = task->get_future();

    // 2.执行任务 -- 把task丢给其它线程执行 -- 这里使用lambda表达式执行(把task弄成指针, 然后解引用再调用)
    std::thread td([task]()
    {
        (*task)(11,22);
    });
    td.join();

    // 3,获取结果
    std::cout << ret.get() << std::endl;

    return 0;
}

//g++ package_task.cpp -o package_task -pthread -std=c++11
